package com.android.test

import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.ViewGroup

/**
 *  Created by zxn on 2025/9/3.
 *  分发流程总结（自上而下）：
 * Activity -> Window -> DecorView -> ViewGroup -> ... -> View
 **/
class MainLayout : ViewGroup {

    constructor(context: Context) : super(context)

    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)

    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)

    override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
        // 在这里实现子视图的布局逻辑
        // 遍历所有子视图并调用 child.layout(left, top, right, bottom)
    }

    /**
     * 进行事件分发。它是事件传递的起点，决定如何处置当前事件：是自行消费、分发给子视图还是传递给父视图。
     */
    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
        return super.dispatchTouchEvent(ev)
    }

    /**
     * 判断是否拦截某个事件。这是解决嵌套滑动冲突的关键方法。
     * 只有 ViewGroup 及其子类拥有这个方法。它像一个“关卡”，决定事件是继续向下传递（给子View）还是被当前ViewGroup截获（自己处理）。
     */
    override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        return super.onInterceptTouchEvent(ev)
    }

    /**
     *处理点击事件。
     * true 表示该事件已被消费，传递过程终止；false 表示未消费，事件会回传给父容器的 onTouchEvent 处理。
     */
    @SuppressLint("ClickableViewAccessibility")
    override fun onTouchEvent(event: MotionEvent?): Boolean {
        return super.onTouchEvent(event)
    }
}